Linux posee distintas maneras de moverse entre archivos y para la administración de grupos, usuarios, permisos y procesos.

En este apartado, ejecutaré algunos comandos a modo de ejercicio.
Para esto utilizaremos la versión mas reciente de ubuntu, montada en virtualbox.
linux_admarch_ubuntu_vm.png


Tabla de contenidos


Manejo de archivos y directorios

1.- Creación de archivos y enlaces

En este apartado:

linux_admarch_touch_original.png

  1. Haremos cd Downloads/ para movernos a la carpeta Downloads
  2. ls para listar que la carpeta esta vacia
  3. touch original.txt con touch le indicamos que crearemos un archivo con el nombre original.txt
  4. ls nuevamente para checar que esté nuestro archivo
  5. cat original.txt para revisar que el archivo esté vacío
  6. nano original.txt para editar original.txt usando el editor nano

Se nos abrirá nano, un editor de texto en el terminal.
linux_admarch_contenido_txt.png
Posteriormente le damos a CTRL + X en el teclado para cerrar, escribimos Y para aceptar los cambios y presionamos ENTER para que se guarde con el mismo nombre.
Posteriormente haremos nuevamente cat original.txt para ver que se haya guardado correctamente:
linux_admarch_cat_original txt.png

Ahora crearemos un enlace duro y listaremos los inodos y permisos.
linux_admarch_ls_li.png

  1. ln -i original.txt duro_link.hd para creación
  2. ls para revisar su existencia
  3. ls -li para listar inodos, permisos e información relevante.
    Aquí podemos notar que ambos archivos son exactamente iguales, tanto el inodo, permisos y fecha de creación pero su nombre es distinto.

Un inodo es un identificador único para el archivo, el cual contiene los metadatos del archivo.

El enlace duro es un alias para un archivo. Es decir, es otra forma de acceder al mismo inodo.
En este caso, duro_link.hd y original.txt, lo que están haciendo ambos es acceder al inodo 918265, con nombres diferentes.
Originalmente pensaba que eran lo mismo que los enlaces simbólicos (soft links - accesos directos) pero investigando un poco más encontré una analogía buenísima: Los enlaces duros son dos números de teléfono distintos para la misma linea, mientras que un enlace simbólico son dos lineas diferentes para la misma casa. Esto quiere decir que un enlace duro de un archivo es el mismo archivo (inodo), accedido con otro nombre. Pero un enlace simbólico es otra forma de acceder a un archivo con un inodo diferente.
Las ventajas de un enlace duro parecen superiores ya que son más rápidos al apuntar al mismo inodo, pero no pueden cruzar sistemas y no pueden apuntar a directorios. En cambio los enlaces simbólicos son más flexibles en ese sentido pero se pueden romper más fácilmente.

Los enlaces duros pueden ser ideales cuando necesitamos múltiples nombres para un mismo archivo dentro del mismo sistema y queremos darle mayor seguridad a que el archivo no será accidentalmente borrado.

¿Qué pasa si elimino el archivo original?
Si elimino el archivo original, todos los enlaces duros se vuelven inválidos. Sin embargo, el archivo sigue existiendo en el disco porque su inodo sigue estando activo. Recién cuando eliminemos todos los enlaces duros, su inodo desaparecerá.

2.- Modificación

En este apartado:

3.- Eliminación y enlaces

En este apartado:

  1. rm original.txt: eliminamos original.txt
  2. cat duro_link.hd: comprobamos que el contenido sigue siendo el mismo
  3. ls -li: verificamos qué hay en la carpeta.

Si bien, eliminamos el archivo original, su enlace duro sigue estando ahí. Como mencioné aquí, aplica el mismo concepto. Su inodo sigue existiendo y es a eso a lo que estamos apuntando.

4.- Enlaces simbólicos

En este apartado:

linux_admarch_touch_con_echo.png

Aquí podemos notar que los inodos de example y symlink son distintos. Además, podemos corroborar que los permisos son diferentes, incluye una l que indica que es un enlace simbólico, tiene fechas distintas y además symlink.sl -> example.txt nos indica que este archivo está apuntando a otro.
Con esta información podemos concluir definitivamente que un enlace simbólico es diametralmente diferente a un enlace duro.

5.- Eliminación e impacto en enlace simbólico

En este apartado:

linux_admarch_rm_comprob.png

  1. rm example.txt: eliminamos example
  2. cat symlink.sl: revisamos el contenido, notamos que indica que el archivo no existe
  3. ls -li: El archivo en realidad está ahí pero ahora su dirección apunta en rojo.

¿Qué ocurre?, los enlaces simbólicos al apuntar hacia otros archivos, no funcionan por sí solos. Es por esto que me arroja que el archivo no existe, porque en realidad me está diciendo que el archivo al que apunta, no existe.
Aquí nuevamente podemos comprarlo con mi respuesta previa. Los enlaces simbólicos apuntan al archivo y no al inodo como lo hacíamos con los enlaces duros.

6.- Find e importancia de logs

En este apartado:

linux_admarch_find_args.png

linux_admarch_sudo_rm.png

Crear copias de los logs es crucial para mantener la integridad de los mismos. Con estas copias de seguridad podemos asegurarnos que los contenidos no han sido modificados y que están disponibles en todo momento. En este enlace de mis apuntes, hablo un poco sobre logs

7.- Comando de búsqueda

En este apartado:

  1. find ~/ -type f -size +5M -exec ls -lh {} +: Con este comando encontramos todos los archivos mayores a 5MB, pero dado que es una instalación fresca, no encontrará nada así que realizamos el siguiente:
  2. find ~/ -type f -size +1M -exec ls -lh {} +: Es el mismo comando pero cambiamos que sea mayores a 1MB. Esto nos despliega como resultado los permisos, el autor, dueño, tamaño, fecha de modificación y localización, pero creo que podría mejorarse.

linux_admarch_find_awk_adv.png
Este comando es similar, pero un poco más complejo. El resultado de find se lo pasamos (|) a awk (un lenguaje de programación interno de linea de comandos usado para procesar y analizar textos), luego imprimimos (print) los parámetros $9 y $5 concatenando un : entremedio.

La utilidad de este tipo de comandos es útil a la hora de tomar respaldos, de administrar el espacio, ayuda a hacer mantenimiento de los computadores y ayuda a identificar archivos obsoletos, con esto podemos fácilmente identificar archivos problemáticos, podriamos combinarlo con otros comandos para automáticamente eliminar todos los archivos mayores que un determinado tamaño o podriamos generar un informe con ello.


Usuarios y grupos

1.- Creación de usuario

En este apartado:

  1. cat /etc/passwd: Primero corremos este comando para verifiar los usuarios actuales. Los primeros usuarios que lista son todos internos de sistema, el último es el usuario que cree para usar ubuntu.

linux_admarch_useradd.png

  1. sudo useradd -u 1000 -s /bin/bash ana: sudo, creamos nuevo usuario, le pasamos el id y le decimos que shell usar. En este caso nos encontramos con un error porque el id 1000 ya estaba en uso por el usuario por defecto (seb)
  2. sudo useradd -u 1001 -s /bin/bash ana: Cambiamos el id 1000 por el 1001 y esta vez si funciona
  3. sudo useradd -u 1100 -s /usr/sbin/nologin marta: Mismo proceso pero le damos id 1100 y especificamos usar no-login.
  4. sudo useradd -u 1200 -s /bin/zsh: Mismo proceso, id 1200 pero nos topamos con que no es posible ya que no existe zsh. Procedemos a su instalación.

linux_admarch_apt_install.png

  1. sudo apt install zsh git fonts-font-awesome: sudo, apt install para installar zsh, además le damos parametros adicionales para instalar fuentes que podrían ser útiles para configurar zsh en un futuro.
  2. sudo useradd -u 1200 -s /bin/zsh: Lo ejecutamos pero me dice que el usuario ya existe así que lanzamos...
  3. cat /etc/passwd: Para leer nuevamente los contenidos de passwd, listar usuarios y obtenemos:
    linux_admarch_usrlist.png
    Con esto ya confirmamos que están los 3 usuarios creados y con un shell asignado.
    Como anotación sobre los shells, me parece importante mencionar:

2.- Creación de grupos

En este apartado:

linux_admarch_usermod.png
Ejecutamos:

  1. sudo usermod -aG grupo usuario: Ejecutamos este comando tres veces cambiando los parámetros de grupo y usuario
  2. uso (...): comando mal escrito
  3. groups ana marta carlos: Listamos los grupos de cada usuario.

Con este proceso hemos agregado a cada usuario a un grupo distinto.

3.- Listar usuarios

En este apartado:

Lo primero que noté es que además de los grupos que le entregué yo a cada uno, cada usuario tiene un grupo personal con la misma id que el usuario.
Esto se debe a que la mayoría de las distros modernas de linux existe el concepto de UPG o User Private Group. Cuando creamos un usuario nuevo, se le asigna automáticamente a un grupo privado del mismo usuario, de modo que los archivos que este crea, sean sólo de su autoría y no de un grupo común, para así evitar problemas de integridad.

Ahora, listaremos además los usuarios con grep.
linux_admarch_grep_usr.png
La salida que nos entrega grep es usuario:contraseña:uid:gid:comentario:rutaHome:shell.
La contraseña está encriptada por lo tanto sólo nos entrega 'x' a modo simbólico, como no tenemos comentarios de usuario sólo aparece como :: sin nada entremedio.

4.- Listar grupos

En este apartado:


Procesos

1.- Formas de revisar procesos

En este apartado:

PS

linux_admarch_ps.png
ps: Muestra un snapshot o instantánea de los procesos. Veo que es más limitado sin argumentos pero si le pasamos aux es mucho más completo
linux_admarch_ps_aux.png
ps aux

PSTREE

linux_admarch_pstree.png
pstree: Muestra los procesos como un árbol, podemos ver qué proceso responde a qué o su relación padre-hijo.

TOP

linux_admarch_top.png
top: Funciona en tiempo real, y se va actualizando constantemente como un monitor. Similar al administrador de tareas de windows.

HTOP

linux_admarch_htop.png
htop: No viene por defecto pero lo instalamos rápidamente con sudo apt install htop. Es más completo que top.

Cada uno de los comandos utilizados tiene su propia ventaja y desventaja.

2.- Suspensión de procesos

En este apartado:

Ejecutamos vi para abrir Vim y presionamos CTRL + Z
linux_admarch_suspend.png
linux_admarch_ps_grep.png
linux_admarch_ps_grep_vi.png
Ejecutamos:

linux_admarch_foreground.png
Utilizamos el comando fg nombre. En este caso, fg era suficiente, esto trae el proceso suspendido más reciente, pero es bueno tener en cuenta que si tenemos más de uno, debemos pasarle el nombre.
linux_admarch_backtovim.png

Realizamos nuevamente ps y notamos que Vi ya no está activo.
linux_admarch_ps_comp.png

De pasada, aprovecharemos de cerrar forzosamente nano
linux_admarch_kill.png
kill -9 5113

3.- Relaciones jerárquicas

En este apartado:

Para mostrar las relaciones de jerarquía que tienen los procesos, usando ps, le pasamos los argumentos fax, cada uno de ellos hace algo diferente:

Ejecutamos ps fax
linux_admarch_ps_aux_tree.png
Aquí podemos ver en el proceso 2627 que:

Ejecutamos ps -ejH
linux_admarch_pid.png
Este es un comando similar con la diferencia que:

También, similarmente tenemos ps --tree que no está disponible siempre pero muestra sólo los procesos activos del usuario, omitiendo los procesos en segundo plano.
linux_admarch_ps_forest.png

4.- Backups y Cron

En este apartado:

Para esto tenemos 2 alternativas:

  1. Crear un script, el cual sea ejecutado por crontab
  2. Crear la tarea dentro de crontab.

Con tareas complejas la primera opción es la ideal, por lo tanto la segunda opción es la más adecuada, pero por fines educativos haremos ambas.

linux_admarch_compr.png

  1. ls para notar que no hay nada en /Documents
  2. touch script-backup-cron.sh para crear un script de bash
  3. ls nuevamente para ver su creación
  4. nano script-backup-cron.sh para editar el archivo.

linux_admarch_script_bash.png

  1. cat script-backup-cron.sh mostramos el contenido, ahí podemos ver el script que hice.
  2. crontab -e lanzamos el -editor de crontab.

linux_admarch_cron_backupscript.png

La configuración va así:

  1. hora, día, comando.
  2. hora está dividido en minutos, horas
  3. día está dividido en día del mes, mes, día de la semana
  4. se pueden usar asteriscos * para indicar que sean "todos"
  5. el comando a ejecutar puede ser un linkeo externo (como la primera línea que ejecuta el script indicado)
  6. el comando puede ser dentro de la misma linea (como la segunda línea)

Es importante automatizar ciertos procesos para disminuir el error humano y mejora la eficiencia. Mientras menos tenga que intervenir el usuario en tareas repetitivas, menos espacio dejas para errores por negligencia. Es también importante realizar backups constantes de archivos importantes, como mencionamos en este apartado.
Cron es una poderosa herramienta para automatizar los procesos más tediosos pero importantes. Nos permite automatizar tareas según frecuencia en horas, días o incluso meses. Las tareas se ejecutarán aún cuando el equipo se haya reiniciado, dada la consistencia. Además es bastante sencillo de utilizar.

5.- Automatización de un reporte de monitoreo e importancia.

En este apartado:

Nuevamente podemos realizarlo a través de un script o directo a Cron.
En esta oportunidad, con un script es una tarea más compleja pero de todas formas haremos ambos.
linux_admarch_comprob_scri.png
Creamos el archivo, listamos y lo editamos con nano.

linux_admarch_bash_.png
Creamos el script.
Ahora vamos a linkearlo en crontab
linux_admarch_crontab_script_log.png
En la 3ra linea tenemos el linkeo del script, similar al de la linea 1.
En la 4ta linea tenemos el comando directo.

Ahora, la forma dentro de crontab puede sonar tentativa por simplicidad pero es importante mencionar que es menos modificable. Si quisiéramos hacer lo mismo que en el script, tendríamos una linea más compleja con información, la cual puede resultar difícil de leer si tenemos muchas automatizaciones.

Monitorear regularmente los recursos del sistema es importante para detectar anomalías y mantener un ojo en cuando podemos necesitar una mantención. También nos ayuda a analizar el rendimiento, reconocer cuándo el disco se llenará y así tomar acciones preventivas.
También es importantísimo al momento de cumplir normativas de una empresa o para análisis forenses.

Similar a crontab también tenemos nagios que nos puede ayudar a levantar alertas para ello. Grafana también es uno muy útil ya que nos puede mostrar visualizaciones para hacer más legible la información.


Conclusión

El manejo de herramientas y comandos en Linux es esencial para lograr un desempeño óptimo en la administración. Aunque Linux es conocido por su curva de aprendizaje y su interfaz menos amigable en comparación con otros sistemas operativos más populares, sus ventajas se hacen evidentes a medida que nos familiarizamos con sus capacidades.

El uso de herramientas como cron facilita la automatización de tareas, permitiendo una gestión eficiente y programada de procesos repetitivos, como backups y reportes. Esto no solo ahorra tiempo, sino que también minimiza el riesgo de errores humanos y asegura la consistencia en las tareas de mantenimiento del sistema.

Además, comandos como grep resultan fundamentales para el filtrado y la búsqueda de información específica en el sistema, mejorando la eficiencia.
A través de estos ejercicios, hemos desarrollado habilidades prácticas en la administración de Linux y hemos obtenido una comprensión más profunda del sistema. La capacidad de gestionar procesos, configurar tareas y realizar monitoreo de recursos proporciona una base sólida, destacando las fortalezas y flexibilidad de Linux en comparación con otros entornos.


Anexo: Comandos utilizados